import { type DataInfo, removeToken, setToken } from './auth';
import { getQueryMap, subBefore } from '@pureadmin/utils';

/**
 * 简版前端单点登录，根据实际业务自行编写，平台启动后本地可以跳后面这个链接进行测试 http://localhost:8848/#/permission/page/index?username=sso&roles=admin&accessToken=eyJhbGciOiJIUzUxMiJ9.admin
 * 划重点：
 * 判断是否为单点登录，不为则直接返回不再进行任何逻辑处理，下面是单点登录后的逻辑处理
 * 1.清空本地旧信息；
 * 2.获取url中的重要参数信息，然后通过 setToken 保存在本地；
 * 3.删除不需要显示在 url 的参数
 * 4.使用 window.location.replace 跳转正确页面
 */
(function () {
	// 获取 url 中的参数
	const params = getQueryMap(location.href) as DataInfo<Date>;
	const must = ['username', 'roles', 'accessToken'];
	const mustLength = must.length;
	if (Object.keys(params).length !== mustLength) return;

	// url 参数满足 must 里的全部值，才判定为单点登录，避免非单点登录时刷新页面无限循环
	let sso = [];
	let start = 0;

	while (start < mustLength) {
		if (Object.keys(params).includes(must[start]) && sso.length <= mustLength) {
			sso.push(must[start]);
		} else {
			sso = [];
		}
		start++;
	}

	if (sso.length === mustLength) {
		// 判定为单点登录

		// 清空本地旧信息
		removeToken();

		// 保存新信息到本地
		setToken(params);

		// 删除不需要显示在 url 的参数
		delete params.roles;
		delete params.accessToken;

		const newUrl = `${location.origin}${location.pathname}${subBefore(location.hash, '?')}?${JSON.stringify(params).replace(/["{}]/g, '').replace(/:/g, '=').replace(/,/g, '&')}`;

		// 替换历史记录项
		window.location.replace(newUrl);
	} else {
		return;
	}
})();

/**
 * 批量创建下载链接
 * @param blob
 * @param filename
 */
export function download(blob: any, filename: string) {
	// 创建一个临时的 URL，用于下载文件
	const a = document.createElement('a');
	const url = window.URL.createObjectURL(new Blob([blob]));
	a.href = url;

	// 创建一个<a>元素，设置其 download 属性和 href 属性，模拟点击下载
	a.download = filename;
	document.body.appendChild(a);
	a.click();

	// 清理创建的临时元素和 URL
	URL.revokeObjectURL(url);
	document.body.removeChild(a);
}
